﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dominio;
using Persistencia;

namespace PersistenciaImplementacion
{
    class BrokerManguera : Broker
    {
        public override string GetSQLCreate()
        {
            return "INSERT INTO Manguera (idSurtidor, idTanque, borrado) VALUES (@idSurtidor, @idTanque, @borrado)SELECT SCOPE_IDENTITY()";
        }

        public override string GetSQLDelete()
        {
            return "UPDATE Manguera SET borrado = 1 where idManguera = @idManguera";
        }

        public override string GetSQLUpdate()
        {
            return "INSERT INTO Display(idManguera, litrosDisponibles, totalLitrosCargados, idSurtidor, idTanque, fecha) " +
            "VALUES (@idManguera, @litrosDisponibles, @totalLitros, @idSurtidor, @idTanque, @fecha)";
        }

        public override string GetSQLSelect()
        {
            return "SELECT * FROM Manguera WHERE borrado=0";
        }

        public override ObjetoPersistible ReaderToObject(System.Data.Common.DbDataReader reader)
        {
            Manguera man = new Manguera();
            man.IdManguera = Int32.Parse(reader["idManguera"].ToString());

            int idSurtidor = Int32.Parse(reader["idSurtidor"].ToString());
            man.AgregarSurtidor(idSurtidor);

            int idTanque = Int32.Parse(reader["idTanque"].ToString());
            man.AgregarTanque(idTanque);

            Sistema.GetSistema().AgregarManguera(man);

            return man;            
        }

        public override void LoadReferences(System.Data.SqlClient.SqlCommand comando, Persistencia.ObjetoPersistible obj)
        {
            SqlParameter idSurtidor = new SqlParameter("@idSurtidor", (obj as Manguera).Surtidor.IdSurtidor);
            SqlParameter idTanque = new SqlParameter("@idTanque", (obj as Manguera).Tanque.idTanque);
            SqlParameter borrado = new SqlParameter("@borrado","0");
            comando.Parameters.Add(idSurtidor);
            comando.Parameters.Add(idTanque);
            comando.Parameters.Add(borrado);
        }

        public override string InsertarHijos(object objeto, ObjetoPersistible obj)
        {
            Manguera man = (Manguera)obj;
            man.IdManguera = Int32.Parse(objeto.ToString());
            return null;
        }

        public override void LoadReferencesWhere(System.Data.SqlClient.SqlCommand comando, ObjetoPersistible obj)
        {
            SqlParameter idManguera = new SqlParameter("@idManguera", (obj as Manguera).IdManguera);
            comando.Parameters.Add(idManguera);

            Manguera man = (Manguera)obj;
            SqlParameter litrosDisponibles = new SqlParameter("@litrosDisponibles", (obj as Manguera).Tanque.LitrosDisponibles);
            //Calculo la cantidad de litros totales expendidos
            int total = 0;
            foreach (Expendido e in man.Expendidos)
            {
                total += e.CantidadLitros;
            }
            SqlParameter totalLitrosCargados = new SqlParameter("@totalLitros", total);

            SqlParameter idSurtidor = new SqlParameter("@idSurtidor", (obj as Manguera).Surtidor.IdSurtidor);
            SqlParameter idTanque = new SqlParameter("@idTanque", (obj as Manguera).Tanque.idTanque);
            SqlParameter fecha = new SqlParameter("@fecha", SqlDbType.DateTime);
            fecha.Value = DateTime.Now;

            comando.Parameters.Add(litrosDisponibles);
            comando.Parameters.Add(totalLitrosCargados);
            comando.Parameters.Add(idSurtidor);
            comando.Parameters.Add(idTanque);
            comando.Parameters.Add(fecha);
        }
    }
}
